package org.example;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

/**
 * ClassName: RequestConteoller
 * Package: org.example
 * Description:
 *
 * @Author liu
 * @Create 2025/5/14 15:45
 * @ Version 1.0
 */

 /*
      HTTP协议：分为HTTP请求协议和HTTP响应协议
      HTTP请求协议：
         包含：请求行，请求头，请求体
          请求行：
             请求方式：GET,POST
             资源路径：/hello/findAll?name=oppp&status=1(GET)
                请求路径：/hello/findAll
                请求参数：name=oppp&status=1
             请求协议：HTTP/1.1
         请求头：Host(主机名) User-Agent(浏览器版本) Accept(浏览器能接受的资源类型) Accept-Language Accept-Encoding(压缩方式)  Content-Type(请求主体的数据类型) Content-Length(请求主体的大小)
         请求体：存储请求参数(post专属)
                与请求头相隔一行
     */


@RestController
public class RequestConteoller {
  /**
   * 请求路径 http://localhost:8080/request?name=Tom&age=18
   *
   * @Param:request
   * @return:
   */

  @RequestMapping("/request")
  public String request(HttpServletRequest request) {
    //1.获取请求参数
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    System.out.println("name:" + name + "age:" + age);
    //2.获取请求路径
    String uri = request.getRequestURI();//仅仅时/request
    String url = request.getRequestURL().toString();//全部url
    System.out.println("uri:" + uri);
    System.out.println("url:" + url);
    //3.获取请求方式
    String method = request.getMethod();
    System.out.println("method:" + method);
    //4.获取请求头
    String header = request.getHeader("User-Agent");
    return "request success";
  }

  /**
   * HTTP响应协议：
   * 包含：响应行，响应头，响应体
   * 响应行：
   * 协议：HTTP/1.1
   * 状态码：1xx(响应中)  2xx(成功) 3xx(重定向=>原本的url的地址不对，返回浏览器正确的地址，浏览器重新加载) 4xx(客户端错误，404) 5xx(服务器端错误，代码有误)
   * 状态码描述：OK(200)
   * 响应头：content-type(响应主体的数据类型) content-length(响应主体的大小)  content-Encoding(压缩方式) Cache-Control(缓存控制) Set-cookie(设置cookie)
   * 响应体：
   */
  //注意：响应状态码与响应头如果没有特殊要求，都使用默认值即可
  @RequestMapping("/response")
  public void response(HttpServletResponse response) throws IOException {
    //1.设置响应状态码
    response.setStatus(401);
    //2.设置响应头
    response.setHeader("name", "itcast");
    //3.设置响应体
    response.setContentType("text/html;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    response.getWriter().write("<h1>hello response</h1>");
  }

  @RequestMapping("/response2")
  public ResponseEntity<String> response2(HttpServletResponse response) throws IOException {
    return ResponseEntity
            .status(401)
            .header("name", "itcast")
            .body("<h1>hello response</h1>");
  }

}